##### Classes #####

'''
documentacao do modulo
'''

class Cartao:
    '''
    documentacao da classe
    representacao de cartoes
    '''

    # variavel de classe

    material = 'plastico'
    def __init__(self, numero = '', nome = ''):
        '''
        documentacao do construtor
        '''

        # variavel publica de instancia
        self.nome = nome

        # numero associado a cada cartao
        # representado sob a forma de uma string
        # variavel privada de instancia
        self.setnumero(numero)
        pass

    # setters e getters
    def setnumero(self, numero):
        '''
        documentacao do metodo
        '''
        self.__numero = numero

    def getnumero(self):
        return self.__numero

    def __str__(self):
        return "Cartao: {0}".format(self.getnumero())
    pass

class CartaoNovoEstilo(object):
    '''
    documentacao da classe
    representacao de cartoes
    '''

    # variavel  de classe
    material = 'plastico'
    def __init__(self, numero = '', nome = ''):
        '''
        documentacao do construtor
        '''

        # variavel publica de instancia
        self.nome = nome

        # numero associado a cada cartao
        # representado sob a forma de uma string
        # variavel privada de instancia
        self.setnumero(numero)
        pass

    # setters e getters
    def setnumero(self, numero):
        '''
        documentacao do metodo
        '''
        self.__numero = numero
    def getnumero(self):
        return self.__numero

    def __str__(self):
        return "Cartao: {0}".format(self.getnumero())
    pass

def teste():
    # criacao de um objeto da classe Cartao
    obj1 = Cartao('12345678')

    # criacao de um segundo objeto da classe Cartao
    obj2 = Cartao('87654321')

    # variaveis de classe e de instancia
    print Cartao.material

    print obj1.getnumero(), obj1.nome

    obj1.setnumero('12121212')
    obj1.nome = 'Marica Chucha'

    print obj1.getnumero(), obj1.nome
    pass
